package com.cskaoyan.javase.oop1._7bigexercise._4packaging;

/**
 * @description: 包装类型
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 包装类型是通过将基本数据类型的值
 *      变成对象中的成员变量实现包装的
 * 比如Integer是将int值变成对象中的int value
 *
 * > 什么是包装类？
 * 1. 我们Java程序员常说，Java是面向对象语言，Java当中万物皆对象
 * 2. 但实际上这句话，并不严谨，Java并不是完全面向对象语言，因为Java还有基本数据类型，它们不是对象
 * 3. 为了避免这种尴尬的处境，并且我们确实有需求把基本数据类型也当成对象使用，Java引入了包装类
 * 4. 所以，所谓包装类就是把基本数据类型包装成引用数据类型，变成一个个对象
 *
 * > 包装类有什么特点？
 * 1. 在Java当中把基本数据类型，转换为其对应的包装类称之为“**装箱**”
 * 2. 在Java当中把包装类，转换为其对应的基本数据类型称之为“**拆箱**”
 * 3. 在Java当中装箱和拆箱，都是自动进行的。基本数据类型和它的包装类可以自由、自动得互相转换
 *    - 自动拆装箱实际上是依赖于底层自动调用方法去实现的（具体的方法可以自行查阅一下）
 *    - 自动拆装箱意味着，多数情况下，基本数据类型和它的包装类可以混用（当然也有不能混用的情况）
 *
 * 包装类型有哪些?
 * byte ---> Byte
 * short ---> Short
 * int ---> Integer
 * long ---> Long
 *
 * float ---> Float
 * double ---> Double
 *
 * char ---> Character
 *
 * boolean ---> Boolean
 * ----------
 * 除此之外,还有一个特殊的包装类型
 * void ----> Void
 *
 */
public class Demo2 {
    public static void main(String[] args) {

        System.out.println(Integer.MAX_VALUE);
        //Numeric overflow in expression
        System.out.println(Integer.MAX_VALUE + 1);

        System.out.println(Byte.MAX_VALUE); //127
        System.out.println(Byte.MAX_VALUE + 1); //128
        System.out.println(((byte) (Byte.MAX_VALUE + 1)));

        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MAX_VALUE + 1);
        System.out.println(((short) (Short.MAX_VALUE + 1)));

        System.out.println(Long.MAX_VALUE);
        //Numeric overflow in expression
        System.out.println(Long.MAX_VALUE + 1);


    }
}
